#ifndef _SERVER_H_
#define _SERVER_H_

#include <iostream>
#include <list>
#include <map>
#include "SFML/Graphics.hpp"
#include "SFML/Network.hpp"


using namespace std;

class Camp;
class Carte;
class Partie;


typedef struct Client {
	sf::TcpSocket * BR;
	sf::TcpSocket * BR_partie;
	//string nom;
	string nom_game; // Nom de la partie dans lequel se trouve le client
	bool ready;
} Client;

// *********************************
// Classe server :
// 
// Sans interface graphique
// gere toutes les parties, les IA, ...
//
// **********************************
class Server
{
	private :

		// Donnees des parties :
		// - Clients
		// - Parties crees
		//
		map< string, Partie * > parties;
		map< string, Client * > clients;

		// Donnees pour le serveur :
		sf::TcpListener listener;
		sf::TcpListener * listener_partie;
		sf::SocketSelector selector;
		sf::SocketSelector * selector_partie;

	public :
		
		Server( int port );
		~Server();

		/*
		 * Boucle principale du server
		 * Se lance une fois et fait tout
		 */
		void run();

		void ajouterClient();
		void ajouterclientBRPartie();
		void supprimerClient( string client );

		void ajouterClientDansPartie( pair<string,Client *> client, string nomPartie, bool newGame );
		void supprimerClientDePartie( pair<string,Client *> client, string nomPartie );

		void demarrerPartie( string nomPartie );
		void supprimerPartie( string nomPartie );

		//void sendTo( Client* c, sf::Packet & p);
		//void sendToAll( sf::Packet & p);
		//void sendPartie( string nomPartie, string nomClient);

		
};


#endif
